Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
一个简单的 Javascript 缓存管理,支持浏览器端和 node 端。
localStorage
sessionStorage
npm install cache2
yarn add cache2
pnpm add cache2
默认使用内存缓存数据。
import Cache2 from 'cache2';
const myCache = new Cache2(options);
myCache.set(key, value, ttl?);
myCache.get(key);
自定义命名空间和缓存。
import Cache2 from 'cache2';
const myCache = new Cache2('namespace', {
storage: localStorage
});
myCache.set(key, value, ttl?);
myCache.get(key);
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
max | 最大缓存数据数量。-1 表示无限制。 | number | -1 |
maxStrategy | 当达到最大缓存数量限制时的缓存策略。'limited' 表示达到限制数量后不存入数据,保存时返回 false 。'replaced' 表示优先替换快过期的数据,如果都是一样的过期时间(0),按照先入先出规则处理,保存时始终返回 true 。 | 'limited' | 'replaced' | 'limited' |
stdTTL | 相对当前时间的数据存活时间,应用于当前实例的所有缓存数据。单位为毫秒,0 表示无期限。 | number | 0 |
checkperiod | 定时检查过期数据,单位毫秒。如果小于等于 0 表示不启动定时器检查。 | number | 0 |
prefix | 命名空间缓存键前缀。 | string | cache2_ |
storage | 自定义数据存储器,支持 localStorage sessionStorage 。默认使用内存缓存。 | TStorage | - |
needParsed | 存取数据时是否需要解析和序列化数据。如果使用内存缓存,默认为 false ,如果自定义 storage 默认为 true 。 | boolean | - |
replacer | 仅在自定义数据存储器后生效。同 JSON.stringify 的 replacer。 | (this: any, key: string, value: any) => any | - |
reviver | 仅在自定义数据存储器后生效。同 JSON.parse 的 reviver。 | (this: any, key: string, value: any) => any | - |
import Cache2 from 'cache2';
const myCache = new Cache2();
设置键值对。设置成功返回 true
。
const obj = { foo: 'bar', baz: 42 };
myCache.set('myKey', obj, 5 * 60 * 1000);
// true
设置多个键值对。设置成功返回 true
。
const obj = { foo: 'bar', baz: 42 };
const obj2 = { a: 1, b: 2 };
myCache.mset([
{ key: 'myKey', value: obj, ttl: 5 * 60 * 1000 },
{ key: 'myKey2', value: obj2 }
]);
// true
从缓存中获取保存的值。如果未找到或已过期,则返回 undefined
。如果找到该值,则返回该值。
const value = myCache.get('myKey');
if (value === undefined) {
// 未找到或已过期
}
// { foo: 'bar', baz: 42 }
获取缓存值并从缓存中删除键。
myCache.set('myKey', 'myValue'); // true
myCache.has('myKey'); // true
const value = myCache.take('myKey'); // 'myValue'
myCache.has('myKey'); // false
从缓存中获取多个保存的值。如果未找到或已过期,则返回一个空对象 {}
。如果找到该值,它会返回一个具有键值对的对象。
const value = myCache.mget(['myKey', 'myKey2']);
// {
// myKey: { foo: 'bar', baz: 42 },
// myKey2: { a: 1, b: 2 }
// }
从缓存中获取全部保存的值。返回一个具有键值对的对象。
const value = myCache.getAll();
// {
// myKey: { foo: 'bar', baz: 42 },
// myKey2: { a: 1, b: 2 }
// }
返回当前所有现有键的数组。
myCache.set('bar', 1);
myCache.set('foo', 2);
myCache.keys(); // ['bar', 'foo']
当前缓存是否包含某个键。
myCache.has('foo'); // false
myCache.set('foo', 1);
myCache.has('foo'); // true
删除一个或多个键值。返回已删除条目的数量。删除永远不会失败。
myCache.del('myKey'); // 1
myCache.del('not found'); // 0
myCache.set('myKey', { foo: 'bar', baz: 42 });
myCache.del(['myKey', 'myKey2']); // 2
删除当前所有缓存。
myCache.set('bar', 1);
myCache.set('foo', 2);
myCache.keys(); // ['bar', 'foo']
myCache.clear();
myCache.keys(); // []
重新定义一个键的 ttl
。如果找到并更新成功,则返回 true
。
const obj = { foo: 'bar', baz: 42 };
myCache.set('myKey', obj, 5 * 60 * 1000);
myCache.ttl('myKey', 2 * 60 * 1000);
// true
myCache.ttl('not found', 1000);
// false
获取某个键的过期时间戳。它有以下返回值:
undefined
。ttl
为 0
,返回 0
。const myCache = new Cache2({ stdTTL: 5 * 1000 });
// Date.now() = 1673330000000
myCache.set('ttlKey', 'expireData');
myCache.set('noTtlKey', 'nonExpireData', 0);
myCache.getTtl('ttlKey'); // 1673330005000
myCache.getTtl('noTtlKey'); // 0
myCache.getTtl('unknownKey'); // undefined
获取某个键值的最后修改时间。它有以下返回值:
undefined
。const myCache = new Cache2();
// Date.now() = 1673330000000
myCache.set('myKey', 'foo');
myCache.getLastModified('myKey'); // 1673330000000
// Date.now() = 1673330005000
myCache.set('myKey', 'bar');
myCache.getLastModified('myKey'); // 1673330005000
启动定时校验过期数据。
注意,如果没有设置 checkperiod
将不会触发定时器。
// 设置 checkperiod 之后自动生效
const myCache = new Cache2({
checkperiod: 10 * 60 * 1000 // 10分钟检查一次数据是否过期
});
// 停止定时校验过期数据
myCache.stopCheckperiod();
// 启动定时校验过期数据
myCache.startCheckperiod();
停止定时校验过期数据。参考 startCheckperiod
示例。
成功设置键值后触发。
myCache.on('set', (key, value) => {
// do something
});
删除键值后触发。
myCache.on('del', (key, value) => {
// do something
});
触发校验数据过期后触发。
注意,如果校验数据过期,会先删除数据触发 del
事件,然后再触发 expired
事件。
myCache.on('expired', (key, value) => {
// do something
});
const responseCache = new Cache2({ max: 10, maxStrategy: 'replaced' });
// ...
const fileCache = new Cache2({ max: 20, maxStrategy: 'replaced' });
fileCache.on('del', (key, value) => {
URL.revokeObjectURL(value);
});
fileCache.set(fssid, URL.createObjectURL(file));
sessionStorage
、localStorage
支持过期时间const localCache = new Cache2('storageKey', {
storage: localStorage,
stdTTL: 5 * 60 * 1000 // 默认数据留存时间为5分钟
});
localCache.set('num', 1); // 该数据默认留存5分钟
localCache.set('str', 'foo', 10 * 60 * 1000); // 该数据留存10分钟
自定义 storage
对象需要包含 getItem
setItem
removeItem
。
例如,微信端的同步缓存等。
const wxStorage = {
getItem(key: string) {
return wx.getStorageSync(key);
},
setItem(key: string, value: any) {
wx.setStorageSync(key, value);
},
removeItem(key: string) {
wx.removeStorageSync(key);
}
};
const wxCache = new Cache2('storageKey', {
storage: wxStorage,
needParsed: false,
stdTTL: 5 * 60 * 1000 // 设置默认数据留存时间为5分钟
});
wxCache.set('num', 1); // 该数据默认留存5分钟
wxCache.set('str', 'foo', 10 * 60 * 1000); // 该数据留存10分钟
FAQs
一个简单的 JavaScript 缓存管理,支持浏览器端和 node 端。
The npm package cache2 receives a total of 557 weekly downloads. As such, cache2 popularity was classified as not popular.
We found that cache2 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.